package test20230316;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/3/16 16:42
 * 找到水仙花数，所谓“水仙花数”，是指一个三位数，其各位数字立方和等于该数本身。例如，153是一个水仙花数，因为153=1的立方+ 5的立方+ 3的立方。
 */
@SuppressWarnings({"all"})
public class Main02 {

    public static void main(String[] args) {
        // 因为水仙花是三位数，因此找到100到999之间的所有水仙花数并打印
        System.out.println("100到999之间的所有水仙花数: ");
        for (int num = 100; num <= 999; num++) {
            // 判断是否为水仙花数
            if (theNumberOfDaffodils(num)) {
                System.out.print(num + "\t");
            }
        }
    }

    // 用于判断是否为水仙花数
    private static boolean theNumberOfDaffodils(int num) {
        // 先判断是否为3位数
        if (num < 100 || num >= 1000) {
            return false;
        }
        // 所谓“水仙花数”，是指一个三位数，其各位数字立方和等于该数本身。
        int toBeCompared = 0; // 待比较的数，存储 num 百位立方 + 十位立方 + 个位立法
        int temp = num; // 存储 num 副本
        while (temp > 0) {
            int currentBit = temp % 10; // 逐个取位
            toBeCompared += Math.pow(currentBit, 3); // 取立法叠加
            temp /= 10;
        }
        return toBeCompared == num; // 判断是否为水仙花数
    }
}
